'r => ('a, 'b) ~ ('r => 'a, 'r => 'b)